package object;

public class ObjectDemo {
    public static void main(String[] args) {
       /* Point p=new Point(100,200);
        System.out.println(p);
        *//*如果输出的引用类型变量，系统会默认调用Object类的toString()方法
        该方法返回的字符串格式为: 类的全称@hashcode值
        我们真正想输出的应该是对象的属性值
          我们认为Object类的toString()并不能满足需求
          因此我们常常重写toString()来返回具体的属性值
         *//*
        System.out.println(p.toString());
        String str ="这是一个点:"+p;//调用p的toString()方法将其转换为字符串了
        System.out.println(str);//这是一个点:Point{x=100, y=200}*/

        /*调用Object类的equals()，内部还是在使用==比较地址，没有参考意义
        * 若想比较对象的属性值是否相同，我们认为Object类的equals()并不能满足需求
        * 因此常常需要重写equals()来比较属性的值*/
        /*Point p1 =new Point(100,200);
        Point p2 =new Point(100,200);
        System.out.println(p1==p2);//false == 比较的是地址
        //所以此处调用的是重写之后的equal(),比较的是属性的值是否相同
        System.out.println(p1.equals(p2));//true*/

        String s1 =new String("hellow");
        String s2 =new String("hellow");
        //String类重写了equals()来比较字符串内容是否相同
        System.out.println(s1.equals(s2));//true

        StringBuilder builder1 =new StringBuilder("hellow");
        StringBuilder builder2 =new StringBuilder("hellow");
        System.out.println(builder1.equals(builder2));
        //false  StringBuilder类没有重写equals()，因此调用的还是Object类的equals()比较地址
        //String类、包装类重写了equals()来比较内容是否相等，但StringBuilder并没有。
        System.out.println(s1.equals(builder2));//false 因为不是同一个类型无法判断直接false

    }
}
